package com.meal.common.utils.mjSms;

import org.apache.commons.lang3.StringUtils;

import java.net.URLEncoder;

/**
 * <p>
 * <date>2012-03-01</date><br/>
 * <span>软维提供的JAVA接口信息（短信，彩信）调用API</span><br/>
 * <span>----------发送短信-------------</span>
 * </p>
 * 
 * @author LIP
 * @version 1.0.1
 */
public class SmsClientSend {

	/**
	 *  发送信息方法1--必须传入必填内容
	 * 其一：发送方式，默认为POST
	 * 其二：发送内容编码方式，默认为UTF-8
	 * @param url ：必填--发送连接地址URL--比如>http://xtx.telhk.cn:8080/sms.aspx
	 * @param action 动作
	 * @param userid ：必填--用户ID，为数字
	 * @param account ：必填--用户帐号
	 * @param password ：必填--用户密码
	 * @param mobile ：必填--发送的手机号码，多个可以用逗号隔比如>13512345678,13612345678
	 * @param content ：必填--实际发送内容，
	 * @param countNumber ：必填--发送手机号个数，bycuicheng
	 * @return 返回发送信息之后返回字符串
	 */
	public static String sendSms(String url,String action,String userid, String account, String password, String mobile, String content,String countNumber) {
		return sendSms(url,action,userid, account, password, mobile, content,"", "POST", "UTF-8", "UTF-8", countNumber);
	}
	public static String sendSms(String url,String action,String userid, String account, String password, String mobile, String content) {
		return sendSms1(url,action,userid, account, password, mobile, content,"", "POST", "UTF-8", "UTF-8");
	}

	/**
	 * <p>
	 * <date>2012-03-01</date><br/>
	 * <span>发送信息方法--暂时私有化，这里仅仅是提供用户接口而已。其实用不了那么复杂</span><br/>
	 * <span>发送信息最终的组合形如</span>
	 * </p>
	 * 
	 * @param url
	 *            ：必填--发送连接地址URL--比如
	 * 
	 * @param userid
	 *            ：必填--用户ID，为数字
	 * @param account
	 *            ：必填--用户帐号
	 * @param password
	 *            ：必填--用户密码
	 * @param mobile
	 *            ：必填--发送的手机号码，多个可以用逗号隔比如
	 * @param content
	 *            ：必填--实际发送内容，
	 * @param action
	 *            ：选填--访问的事件，默认为send
	 * @param sendTime
	 *            ：选填--定时发送时间，不填则为立即发送，时间格式
	 * @param checkContent
	 *            ：选填--检查是否包含非法关键字，1--表示需要检查，0--表示不检查
	 * @param taskName
	 *            ：选填--任务名称，本次任务描述，100字内
	 * @param countNumber
	 *            ：选填--提交号码总数
	 * @param mobileNumber
	 *            ：选填--手机号码总数
	 * @param telephoneNumber
	 *            ：选填--小灵通（和）或座机总数
	 * @param sendType
	 *            ：选填--发送方式，默认为POST
	 * @param codingType
	 *            ：选填--发送内容编码方式，默认为UTF-8
	 * @param backEncodType
	 *            ：选填--返回内容编码方式，默认为UTF-8
	 * @return 返回发送之后收到的信息
	 */
	private static String sendSms(
			String url, 
			String action, 
			String userid, 
			String account,
			String password, 
			String mobile, 
			String content,
			String sendTime,
			String sendType, 
			String codingType, 
			String backEncodType,
			String countNumber) {
			StringBuffer send = new StringBuffer();

		try {
			if (codingType == null || codingType.equals("")) {
				codingType = "UTF-8";
			}
			if (backEncodType == null || backEncodType.equals("")) {
				backEncodType = "UTF-8";
			}
			
			if (action != null && !action.equals("")) {
				send.append("action=").append(action);
			} else {
				send.append("action=send");
			}
			
			send.append("&userid=").append(userid);
			send.append("&account=").append(URLEncoder.encode(account, codingType));
			send.append("&password=").append(URLEncoder.encode(password, codingType));
			send.append("&mobile=").append(mobile);
			send.append("&content=").append(URLEncoder.encode(content, codingType));
			
			if(StringUtils.isNotBlank(countNumber)){
				if(Integer.valueOf(countNumber)>100){
				float count=Integer.valueOf(countNumber)/100;
				double counts=Math.ceil(count);
				send.append("&countnumber=").append(String.valueOf(counts));//分包
				send.append("&telephoneNumber=").append(countNumber);//手机个数个数
				}else{
					send.append("&countnumber=").append("1");//分包
					send.append("&telephoneNumber=").append(countNumber);//手机个数个数
				}
			}
			
			
			if (sendTime != null && !sendTime.equals("")) {
				send.append("&sendTime=").append(URLEncoder.encode(sendTime, codingType));
			}
			if (sendType != null && (sendType.toLowerCase()).equals("get")) {
				return SmsClientAccessTool.getInstance().doAccessHTTPGet(url + "?" + send.toString(), backEncodType);
			} else {
				return SmsClientAccessTool.getInstance().doAccessHTTPPost(url, send.toString(), backEncodType);
			}
		} catch (Exception e) {
			e.printStackTrace();
			return "未发送，编码异常";
		}
	}
	
	/**
	 * <p>
	 * <date>2017-02-28</date><br/>
	 * 不分包
	 * <span>发送信息方法--暂时私有化，这里仅仅是提供用户接口而已。其实用不了那么复杂</span><br/>
	 * <span>发送信息最终的组合形如</span>
	 * </p>
	 * 
	 * @param url
	 *            ：必填--发送连接地址URL--比如
	 * 
	 * @param userid
	 *            ：必填--用户ID，为数字
	 * @param account
	 *            ：必填--用户帐号
	 * @param password
	 *            ：必填--用户密码
	 * @param mobile
	 *            ：必填--发送的手机号码，多个可以用逗号隔比如
	 * @param content
	 *            ：必填--实际发送内容，
	 * @param action
	 *            ：选填--访问的事件，默认为send
	 * @param sendTime
	 *            ：选填--定时发送时间，不填则为立即发送，时间格式
	 * @param checkContent
	 *            ：选填--检查是否包含非法关键字，1--表示需要检查，0--表示不检查
	 * @param taskName
	 *            ：选填--任务名称，本次任务描述，100字内
	 * @param countNumber
	 *            ：选填--提交号码总数
	 * @param mobileNumber
	 *            ：选填--手机号码总数
	 * @param telephoneNumber
	 *            ：选填--小灵通（和）或座机总数
	 * @param sendType
	 *            ：选填--发送方式，默认为POST
	 * @param codingType
	 *            ：选填--发送内容编码方式，默认为UTF-8
	 * @param backEncodType
	 *            ：选填--返回内容编码方式，默认为UTF-8
	 * @return 返回发送之后收到的信息
	 */
	private static String sendSms1(
			String url, 
			String action, 
			String userid, 
			String account,
			String password, 
			String mobile, 
			String content,
			String sendTime,
			String sendType, 
			String codingType, 
			String backEncodType) {
			StringBuffer send = new StringBuffer();
		try {
			System.out.println("短信重复发送"+userid+" ========== "+mobile+" ========= "+content);
			if (codingType == null || codingType.equals("")) {
				codingType = "UTF-8";
			}
			if (backEncodType == null || backEncodType.equals("")) {
				backEncodType = "UTF-8";
			}
			
			if (action != null && !action.equals("")) {
				send.append("action=").append(action);
			} else {
				send.append("action=send");
			}
			
			send.append("&userid=").append(userid);
			send.append("&account=").append(URLEncoder.encode(account, codingType));
			send.append("&password=").append(URLEncoder.encode(password, codingType));
			send.append("&mobile=").append(mobile);
			send.append("&content=").append(URLEncoder.encode(content, codingType));
			send.append("&extno=").append(URLEncoder.encode("106902202301", codingType));//by cuicheng 2017/3/7短信供应商新增参数

			if (sendTime != null && !sendTime.equals("")) {
				send.append("&sendTime=").append(URLEncoder.encode(sendTime, codingType));
			}
			if (sendType != null && (sendType.toLowerCase()).equals("get")) {
				return SmsClientAccessTool.getInstance().doAccessHTTPGet(url + "?" + send.toString(), backEncodType);
			} else {
				return SmsClientAccessTool.getInstance().doAccessHTTPPost(url, send.toString(), backEncodType);
			}
		} catch (Exception e) {
			e.printStackTrace();
			return "未发送，编码异常";
		}
	}

}
